<?php
/**
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled with this
 * package in the file LICENSE.txt. It is also available through the
 * world-wide-web at this URL: http://dragonjsonserver.de/license. If you did
 * not receive a copy of the license and are unable to obtain it through the
 * world-wide-web, please send an email to license@dragonjsonserver.de. So we
 * can send you a copy immediately.
 *
 * @copyright Copyright (c) 2012 DragonProjects (http://dragonprojects.de)
 * @license http://framework.zend.com/license/new-bsd New BSD License
 * @author Christoph Herrmann <developer@dragonjsonserver.de>
 */
?>
<h3>Version 1.7.0</h3>
<h4>Releasedatum: 27.10.2012</h4>
<h4>Neue Pakete</h4>
<ul>
    <li>
        DragonX
        <ul>
            <li>Device</li>
            <li>Emailaddress</li>
        </ul>
    </li>
</ul>
<h4>Geänderte Pakete</h4>
<ul>
    <li>
        Dragon
        <ul>
            <li>
                Json
                <ul>
                    <li>Ist in der Konfigurationsdatei '/config/dragon/json/cache.php' ein Dateipfad hinterlegt werden die Servicedefinitionen nun gecacht</li>
                </ul>
            </li>
        </ul>
    </li>
    <li>
        DragonX
        <ul>
            <li>
                Account
                <ul>
                    <li>Es ist nun möglich einen eigenen Record für die Accountdaten zu verwenden indem man die Recordklasse 'Application_Account_Record_Account' definiert</li>
                    <li>Anpassungen um einen eigenen Record der Accountdaten zu unterstützen</li>
                    <li>Die Verlinkung eines Accounts mit einer E-Mail Adresse und einem Passwort wurde vom Paket Account getrennt und in das neue Paket Emailaddress ausgelagert</li>
                    <li>Es steht nun eine Pluginschnittstelle zur Verfügung für Plugins die nach dem Laden eines Accounts bei jedem Request aufgerufen werden sollen, dadurch ist es nun auch möglich die Account ID als Log Event Item in ein Plugin des Logpaketes zu verschieben</li>
                </ul>
            </li>
            <li>
                Acl
                <ul>
                    <li>Anpassungen um einen eigenen Record der Accountdaten zu unterstützen</li>
                </ul>
            </li>
            <li>
                Application
                <ul>
                    <li>Die abstrakte Eigenschaftsklasse wurde umbenannt von 'DragonX_Application_Accessor' in 'DragonX_Application_Accessor_Abstract'</li>
                    <li>Es wird nun das Befüllen von Arrays sowohl beim einzelnen Setzen als auch das Befüllen aus einem Array mit '_' unterstützt</li>
                </ul>
            </li>
            <li>
                Clientmessage
                <ul>
                    <li>Umstellung der Records für die beiden Clientmessagequellen auf die neue Recordklasse mit einem Erstellungszeitpunkt</li>
                </ul>
            </li>
            <li>
                Cronjob
                <ul>
                    <li>Umstellung der Records für die Cronjobs auf die neue Recordklasse mit einem Erstellungs- und Änderungszeitpunkt</li>
                    <li>Es ist nun möglich einzelne Cronjobs gezielt auszuführen auch wenn sie zeitlich noch nicht ausgeführt werden sollen</li>
                    <li>Cronjobs prüfen nicht mehr den letzten Ausführungszeitpunkt sondern werden bei jedem Intervall ausgeführt</li>
                </ul>
            </li>
            <li>
                Log
                <ul>
                    <li>Umstellung der Records für die Logeinträge auf die neue Recordklasse mit einem Erstellungszeitpunkt</li>
                    <li>Plugin das beim Laden des Accounts die AccountID als Log Event Item hinzufügt</li>
                </ul>
            </li>
            <li>
                Storage
                <ul>
                    <li>Abstrakte Recordklassen hinzugefügt die ein Erstellungs- und Änderungszeitpunkt definieren. Davon abgeleitete Records erhalten beim Speichern in eine Storage Engine automatisch die Zeitpunkte</li>
                    <li>Umstellung der Records für die Pakete auf die neuen Recordklassen sodass nun ersichtlich ist wann ein Paket hinzugefügt und zuletzt aktualisiert wurde</li>
                    <li>
                        Die Storage Engine wurde erweitert sodass mehrere Datenbankadapter und Storage Engines definiert werden können
                        <ul>
		                    <li>Es ist nun möglich in der Konfigurationsdatei '/config/dragonx/storage/database.php' mehrere Datenbankverbindungen zu definieren die in verschiedene Keys der Zend Registry hinterlegt werden</li>
		                    <li>Es ist nun möglich in der Konfigurationsdatei '/config/dragonx/storage/engine.php' mehrere Storage Engines zu definieren die in verschiedene Keys der Zend Registry hinterlegt werden</li>
		                    <li>Installationsplugins und deren Verwaltung wurde erweitert sodass man die Datenbankstruktur verschiedener Datenbanken damit verwalten kann</li>
		                </ul>
                    </li>
                    <li>Es wird nun das Speichern von Records mit Arrays unterstützt und mit '_' in den Spaltennamen umgesetzt</li>
                    <li>Der Datenbankname für die Storage Engine steht nun mit 'getDatabasename()' zur Verfügung</li>
                    <li>Der Adapter für die Storage Engine steht nun mit 'getAdapter()' auch nach aussen zur Verfügung</li>
                    <li>Bei der Übergabe eines Records an einen anderen Record werden nun alle Daten bis auf die ID übernommen</li>
                    <li>Beim Laden eines einzelnen Records aus einer Storage Engine wird nun eine Exception geworfen wenn der Record nicht vorhanden ist</li>
                    <li>'offsetGet()' der RecordList wirft nun eine Exception wenn der Index nicht belegt ist. Somit kann man sich den ersten Datensatz einer RecordList immer mit 'list()' holen und muss nicht selbst vorher prüfen ob Records enthalten sind</li>
                    <li>Die Schnittstelle 'DragonX_Storage_Record_ReadOnly_Interface' steht nun für Records zur Verfügung die nicht in einer persistenten Storage Engine gespeichert werden dürfen. Bei schreibende Aktionen mit solchen Records werden von der ZendDbAdataper Storage Engine Exceptions geworfen</li>
                    <li>Wenn Record Listen gefiltert werden durch das Entfernen von neuen, geladenen oder ReadOnly Records werden die Keys nun neu durchnummeriert</li>
                    <li>Es ist nun auch möglich Records bei der ZendDbAdapter Storage Engine per 'loadByConditions()' zu laden wenn ein Wert 'null' sein soll</li>
                    <li>'loadBySqlStatement()' nimmt nun nicht mehr die erste Spalte als Key der RecordList sondern nummeriert von 0 ab durch sodass 'list()' genutzt werden kann</li>
                    <li>'...ByConditions()' Methoden nutzen nun die übergebene Conditions richtig mit der erweiterten Form von Zend inklusive der Unterstützung von 'LIKE' und 'NULL' Abfragen</li>
                    <li>'indexBy...()' Methoden der RecordList unterstützen nun durch Angabe eines zusätzlichen Parameter einmalige Werte sodass bei jedem Index direkt der Record liegt und keine RecordList</li>
                    <li>Hilfsmethode 'getInCondition()' bei der Storage Engine des ZendDbAdapters um IN Abfragen mit mehreren Werten zu unterstützen</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>
<h4>Allgemein</h4>
<ul>
    <li>Die Konstante 'APPLICATION_PATH' wird in der 'bootstrap.php' definiert wenn das Repository 'application' vorhanden ist</li>
    <li>Es besteht nun die Möglichkeit weitere Aktionen über eine 'bootstrap.php' im Application Repository zu definieren die vor allen anderen Aktionen (auch den normalen Bootstrap Plugins) ausgeführt werden</li>
</ul>
<h4>Homepage</h4>
<ul>
    <li>Layoutanpassung für die Profilseiten sodass diese nun auch bei kleiner Auflösungen funktionieren</li>
    <li>Upgrade von Bootstrap Twitter auf die Version 2.1.1</li>
    <li>Auf der Startseite werden nun maximal 5 Seiten im Pagination Menü angezeigt sodass dies auch bei kleiner Auflösung nicht umbricht</li>
    <li>Im Pagination Menü wurde "Vorherige Seite" und "Nächste Seite" durch Symbole ersetzt</li>
    <li>Copyright vom Footer weg in das Impressum verschoben</li>
    <li>Link für die Startseite aus der Navigation genommen da diese über den Projektnamen erreichtbar ist</li>
    <li>Icons eingebaut für die Navigationpunkte und den Download Button, Footer Navigation ausblenden wenn dort keine Navigationspunkte definiert sind</li>
    <li>Bei Fehlern durch nicht gefundene Seiten oder anderen Ausnahmen wird nun der Response Header richtig gesetzt</li>
</ul>
<h4>JsonClient</h4>
<ul>
    <li>Unterstützt nun Htaccess Authentifizierung durch die Methode 'setAuthenticate()'</li>
    <li>Bei der Callbackfunktion für 'success' werden nun alle Parameter weitergereicht die jQuery Ajax Requests anbieten</li>
</ul>
<h4>DragonJsonClient</h4>
<ul>
    <li>Unterstützt nun Defaultwerte aus der SMD und trägt diese in die Eingabefelder ein falls noch keine selbst eingetragenen Werte zur Verfügung stehen</li>
    <li>Es werden nun auch die Anwendungsdaten der JsonClient Bibliothek mit Name und Version angezeigt</li>
    <li>Die Beschriftungen haben nun die richtige Verknüpfung zu den dazugehörigen Eingabefeldern</li>
    <li>Unterstützt nun den Datentyp 'object' bei Services durch die Eingabe von mehreren Key/Value Paaren</li>
    <li>Unterstützt nun den Datentyp 'array' bei Services durch die Eingabe von beliebig vielen Werten</li>
    <li>Unterstützt nun den Datentyp 'boolean' bei Services durch Anzeige einer Checkbox</li>
    <li>Der Sessionhash wird nun neben der E-Mail Adresse ebenfalls vorbefüllt wenn man eingeloggt ist</li>
</ul>
<h2>Migration vom Branch 1.6</h2>
<h3>Benötigt</h3>
<div class="alert alert-warning">Achtung: Durch die Trennung der Pakete Account und Emailaddress muss vor der Ausführung der 'install.php' das Paket Emailaddress hinzugefügt werden, da sonst alle Verknüpfungen zu den Accounts verloren gehen. Ebenfalls aktiviert werden muss das Paket Account aus dem Application Namensraum, da sonst die Accounts verloren gehen.</div>
<div class="alert alert-warning">Achtung: Durch die Umstellung der Passwort Hashes auf bcrypt werden alle vorhandenen Passwort Hashes verworfen. Bestehende Accounts müssen durch die Passwort vergessen Möglichkeit neue Passwörter setzen.</div>
<ul>
    <li>Durch die Umstellung der beiden Clientmessagequellen auf die neue Recordklasse mit einem Erstellungszeitpunkt erhält der Client nun bei jeder Clientmessage ihren Erstellungszeitpunkt als 'created' statt als 'timestamp'</li>
    <li>Durch die Umbennung der Eigenschaftsklasse 'DragonX_Application_Accessor' in 'DragonX_Application_Accessor_Abstract' müssen alle eigenen davon abgeleiteten Klassen angepasst werden</li>
    <li>Clients die bereits die Accountverwaltung genutzt haben müssen angepasst werden auf die neuen Services</li>
</ul>
